
#include <vcl.h>
#pragma hdrstop

#include "Lampara.h"
#include "Math.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)
Lampara::Lampara(){
initialize(3);
        altura=15;
        radio=8;

        posicionFoco[0]=0;
        posicionFoco[1]=10;
        posicionFoco[2]=0;
        posicionFoco[3]=1;

        direccionFoco[0]=0;
        direccionFoco[1]=0;
        direccionFoco[2]=-1;

        anguloFoco=45;

        glLightfv(GL_LIGHT2,GL_POSITION      ,posicionFoco);
        glLightfv(GL_LIGHT2,GL_SPOT_DIRECTION,direccionFoco);
        glLightf (GL_LIGHT2,GL_SPOT_CUTOFF   ,anguloFoco);
        glLightf (GL_LIGHT2,GL_SPOT_EXPONENT ,1);


        glEnable(GL_LIGHTING);

        copa=new Cilindro(0, radio,altura,20,5);
        copa->setColor(255,255,0);
        copa->getMarco()->traslacion(50,80,100);

        copa->getMarco()->rotacionX(M_PI/2);
        copa->getMarco()->rotacionY(M_PI*2);
        insertarObjeto(copa);

        glMatrixMode(GL_MODELVIEW);
}

void Lampara::rotar(int eje, float cuanto ) {
    if (eje == 1) this->copa->getMarco()->rotacionX(cuanto);
    else if (eje == 2) this->copa->getMarco()->rotacionY(cuanto);
    else if (eje == 3) this->copa->getMarco()->rotacionZ(cuanto);
}

void Lampara::mover(int eje, float cuanto) {
    if (eje == 1) {
        this->copa->getMarco()->traslacion(cuanto*1,0,0);
    }
    else if (eje == 2) {
     this->copa->getMarco()->traslacion(0,cuanto*1,0);
    }
    else if (eje == 3)
        this->copa->getMarco()->traslacion(0,0,cuanto*1);
}

void Lampara::escalar(int sentido) {
    if (sentido == 1) this->copa->getMarco()->escalacion(1.1,1.1,1.1);
    else if (sentido == 2) this->copa->getMarco()->escalacion(0.9,0.9,0.9);
}

void Lampara::encender() {
        glPushMatrix();
        glMultMatrixf(this->copa->getMarco()->mat);

        VectorPoint3D * colorDifusion = new VectorPoint3D(1.0,0,0);

        VectorPoint3D * colorAmbiente = new VectorPoint3D(0,0,0);
        VectorPoint3D * posicion=new VectorPoint3D(0,10,0);
        VectorPoint3D * direccion=new VectorPoint3D(-6.0,-6.0,-6.0);

        glEnable(GL_LIGHTING);
        glEnable(GL_LIGHT2);
        glLightfv(GL_LIGHT2,GL_POSITION,posicion->toVector4());
        glLightfv(GL_LIGHT2,GL_AMBIENT,colorAmbiente->toVector4());
        glLightfv(GL_LIGHT2,GL_DIFFUSE,colorDifusion->toVector4());

        glLightf(GL_LIGHT2,GL_SPOT_CUTOFF,20.0);
        glLightfv(GL_LIGHT2,GL_SPOT_DIRECTION,direccion->toVector4());

        glPopMatrix();

        glDisable(GL_LIGHT0);
        glDisable(GL_LIGHT1);
        glEnable(GL_LIGHT2);

}

     /*
     // void Lampara::dibujar(){
    glPushMatrix();
      // Configurar color
      glColor3f(color.getR()/255, color.getG()/255, color.getB()/255);

      // Coger matriz actual
      GLfloat mm[16];
      glGetFloatv(GL_MODELVIEW_MATRIX,mm);
      TAfin* m = new TAfin(mm);

      // Aplicar matriz de transformacion
      m->postMultiplicar(marco);
      glLoadMatrixf(m->mat);

      for (int i=0;i<cont;i++) {
          ObjetoCompuesto* obj = (ObjetoCompuesto*)objetos[i];
          obj->dibujar();
      }
           glLightfv(GL_LIGHT2,GL_POSITION      ,posicionFoco);
         glLightfv(GL_LIGHT2,GL_SPOT_DIRECTION,direccionFoco);
    glPopMatrix();
     };
             */
